package cn.mandy.sysadmin.service;

import cn.mandy.sysadmin.dto.MonitorLogFileParam;
import cn.mandy.sysadmin.dto.MyId;
import cn.mandy.sysadmin.dto.TaskRefreshParam;
import cn.mandy.sysadmin.model.*;

import java.io.IOException;
import java.util.Date;
import java.util.List;

/**
 * Description :
 *
 * @author <a href= "mailto:342987890@qq.com">Winter</a>
 * create date: 2020/4/13 0013
 * project: sysadmin
 * @since
 */
public interface MonitorService {
    /**
     * globalList
     * 返回所有的系统参数
     * @return
     */
    List<MonitorGlobal> globalList();

    /**
     * 更新某个系统参数
     * @param newParam 新的设置值, 必须id, param_name, param_value
     * @return
     */
    int globalUpdate(MonitorGlobal newParam);

    /**
     * cfgHostList
     * 返回所有的主机信息
     * @return
     */
    List<MonitorHost> monitorHostList();

    /**
     * 更新某个主机参数
     * @param newHost 新的设置值, 必须
     * @return
     */
    int monitorHostUpdate(MonitorHost newHost);

    /**
     * 复制某个主机参数
     * @param oldHost 新的设置值, 必须
     * @return
     */
    MonitorHost cfgHostCopy(MonitorHost oldHost) ;


    void monitorJobResort(List<MyId> newOrdinal);

    /**
     * 更新某个作业组及其下的作业, 作业区分新增的还是更新的.
     * @param cfgJob 新的设置值
     * @return 新的作业组值, 用于更新界面
     */
    MonitorJob monitorJobUpdate(MonitorJob cfgJob);

    int jobDelete(List<MyId> param);

    /**
    * 作业上线, 可以批量上线
     * @param param 需要上线的作业id
     * */
    void jobEnable(List<MyId> param);

    /**
     * 作业下线, 可以批量下线
     * @param param 需要下线的作业id
     * @return 0 成功
     * */
    void jobDisable(List<MyId> param);

    /**
     * 复制某个守护进程
     * @param cfgJob 新的设置值
     * @return
     */
    MonitorJob monitorJobGroupCopy(MonitorJob cfgJob);

    List<MonitorJob> monitorJobList();

    List<MonitorTask> listCurrentTask(Long jobId, int recordCount);
    List<MonitorTask> listChildrenCurrentTask(Long jobId, int recordCount);

    List<MonitorTask> listTaskBefore(Long jobId, Date schedulerTime, int recordCount);
    List<MonitorTask> listAllChildrenTaskBefore(Long jobId, Date schedulerTime, int recordCount);
    List<MonitorTask> listTaskAfter(Long jobId, Date schedulerTime, int recordCount);
    List<MonitorTask> listAllChildrenTaskAfter(Long jobId, Date schedulerTime, int recordCount);
    List<MonitorTask> taskRefresh(TaskRefreshParam taskRefreshParam);


    MonitorPlan planCreate(MonitorPlan monitorPlan);
    int planDelete(List<MyId> ids);
    int planEnable(List<MyId> ids);
    int planDisable(List<MyId> ids);

    List<MonitorDependence> dependenceUpdate(List<MonitorDependence> jobDependencies);

    int dependenceDelete(List<MyId> myIds);

    String getTaskLogfile(MonitorLogFileParam monitorLogFileParam) throws IOException;

    MonitorTask getCurrentTask(Long jobId);

    int taskCancel(Long taskId, String oldStatus, String destStatus, String reason);

    MonitorTask taskRedoNow(Long taskId);

    MonitorTask taskCreateNow(Long jobId);

    MonitorTask selectTaskById(Long taskId);

    List<MonitorTask> currentTaskListByJobGroupId(Long jobGroupId);

    int taskGroupStop(Long jobIds, Long taskId, String status);

}
